Objective-C Basic API

按照VoIP&IM Mobile SDK API的封装原则,Objective-C Basic API接口可划分为:基本功能接口、通话功能接口和对讲功能接口等三个功能模块。

下面分别说明各接口功能模块的具体使用方法。

基本功能接口

基本功能接口的函数原型参见“FreePPSDK.h”文件,主要提供应用管理、即时消息和群组管理功能。

4.1.1 应用/账号管理

初始化SDK库

函数原型 + (BOOL)initialize:(NSString *)appKey withDelegate:(id)delegate;
参数 appKey:字符串,用于标识第三方APP的授权码。 delegate:任意指针类型,APP的代理者对象,此对象实现了FreePPSDKDelegate协议。
返回值 布尔型-客户端初始化结果,成功返回YES,失败返回NO。
说明 初始化和启动SDK客户端模块。 注:APP授权码需预先申请。
示例

绑定APP用户账号

函数原型 + (NSString *)bindAppAccount:(NSString *)appUserAccountwithAuth:(BOOL)mustAuth withCallerName:(NSString *)callerName withCallerNumber:(NSString *)callerNumber;
参数 appUserAccount:字符串,App帐号(可采用手机号码作为App帐号,但是也允许使用Email或其它帐号形式)。 mustAuth:布尔值,此参数为YES时,SDK强制到服务器进行远程身份验证,否则只在本地数据库进行验证。这样,由APP自己来决定是否进行互踢,或快速登录。 callerName:字符串,用户的本地昵称,主要用于outbound call时设置主叫的名字; callerNumber:字符串,用户的电话号码,主要用于outbound call时设置主叫的电话号码,需要标准E.164格式。
返回值 字符串-与此帐号绑定的FreePP号码。如果返回值为NULL,则为AppKey不合法,或者绑定失败,具体需要参考错误码表。
说明 验证App的合法性,并分配或绑定FreePP号码,并登录FreePP系统。此外,如果存在callerName和callerNumber则会保存到SDK中,并在发起outbound call时作为主叫的名字和号码发送到PSTN/GSM网络。 注: SDK初次绑定FreePP ID时需要通过访问服务器来完成,因此APP需检查网络是否正常。
示例

登出当前绑定的APP账号

函数原型 + (int)logoutAppAccount;
参数
返回值 整形数类型,如果没有错误时,则返回0。 -15:FreePP SDK未初始化或绑定成功。
说明 重置当前帐号,清除本地的账号记录和缓存的消息。 注:SDK的本地数据库文件暂时不做删除,以方便后续再次使用APP帐号绑定登录
示例

查询FreePP号码

函数原型 +(NSDictionary *)queryFreePPIDByAppAccount:(NSArray *)appAccountArray;
参数 appAccountArray:字符串数组,目标用户的APP帐号列表
返回值 字符串字典类型-与App帐号对应的FreePP号码列表(哈希表:key=value)。如果出现错误则返回NULL,多个账号重复则哈希表中key只有一个。
说明 按照APP账号名称查询指定用户的FreePP号码。
示例

查询APP账号

函数原型 + (NSDictionary *)queryAppAccountByFreePPID:(NSArray *)freePPIDArray;
参数 freePPIDArray:字符串数组,目标用户的FreePPID列表。
返回值 字符串字典类型-与FreePP号码列表对应的APP帐号列表(哈希表:key=value)。如果出现错误,或者对方没有安装FreePP,返回NULL,多个账号重复则哈希表中key只有一个。
说明 根据FreePP号码查询指定用户的APP账号名称。 注:建议APP应缓存查询结果,以减少与SDK/服务器的交互,降低服务器的运营压力
示例

修改SDK配置参数

函数原型 + (int)setParameter:(NSString *)name withValue:(NSString *)value;
参数 name:字符串,参数名称。 value:字符串,参数值。
返回值 整型,0-设置成功,错误码参考错误码表。
说明 设置SDK内部的配置参数。 注:目前支持的配置参数参见附录1。
示例

读取SDK配置参数

函数原型 + (NSString *)getParameter:(NSString *)name;
参数 name:字符串,参数名称。
返回值 字符串-参数值。如果参数不存在,则返回NULL。
说明 读取SDK内部的配置参数。 注:目前支持的配置参数参见附录1。
示例

追踪错误代码

函数原型 + (int)getLastErrorCode
参数
返回值 整型-如果没有错误时,则返回0。(错误代码定义参见附录2)
说明 读取最后一次接口调用失败的错误码。 注:此接口为线程安全的,即保证不同线程最后一次错误是独立保存的,如果调用此接口后,SDK即会清除当前线程的错误码。
示例

响应系统事件

函数原型 CALLBACK - (void)onSystemEvent:(int)eventTypewithEventObject:(id)dataOjbect
参数 eventType:整型,事件类型,包含:1=当前用户被踢出;对应的 data 为 NULL; dataOjbect:对应的数据对象。不同的事件类型,有不同的对象,可以为 NULL。
返回值
说明 向APP推送与当前用户帐号有关的系统事件。
示例

获取计费信息

函数原型 - (int) getUserBalance:(NSString *)peer withflags: (int *)flags
参数 peer:字符串,输入参数,接收本端消息或者通话的接收端(不同的对端身份计费规则可能不同) flags:整型指针,输出参数,返回目前所剩的点数对应的本端与对端支持的服务。是一个位值,0:No,1:YES,位的含义如下: bit0 – 允许发文本消息 bit1 – 允许发图片消息 bit2 – 允许发语音消息 bit3 – 允许语音通话 bit4 – 允许视频通话 bit5 - 显示余额不足警告
返回值 返回目前本端的点数
说明 获取目前本端用户的点数等信息
示例

更新计费信息事件

函数原型 CALLBACK - (void)onUpdateBalanceEvent:(NSString *)peer withBalance:(int)balance withflags: (int )flags
参数 peer:字符串,接收本端消息或者通话的接收端(不同的对端身份计费规则可能不同) balance:整型,本端目前的点数; flags:整型,根据目前所剩的点数本端与对端支持的服务。是一个位值,0:No,1:YES,位的含义如下: bit0 – 允许发文本消息 bit1 – 允许发图片消息 bit2 – 允许发语音消息 bit3 – 允许语音通话 bit4 – 允许视频通话 bit5 - 显示余额不足警告
返回值
说明 向APP上报目前的点数情况。 注:当flags为32时,即bit5为1,其他位都为0,该次上报事件是一个余额不足的警告,该警告只有在通话时才有。
示例 - (void)onUpdateBalanceEvent:(NSString *)peer withBalance:(int)balance withflags: (int )flags { If (flags == 32) { NSLog(@"您当前的余额为%d,余额不足!!",balance ); } Else { NSLog(@"您当前的余额为%d, 还可以进行...服务",balance ); } }
4.1.2 即时消息

发送一对一消息

函数原型 + (NSString *)sendMessage:(NSString *)dstFreePPID withMIME:(NSString *)mimeType forText:(NSString *)textContent forFile:(NSString *)filePath forRetryMessageID:(NSString *)messageID;
参数 dstFreePPID:字符串,目标用户的FreePP号码。 mimeType:字符串,多媒体消息的类型,例如:”text/plain” textContent:字符串,文本消息的内容,其格式根mimeType来区分。如果为text/plain则为纯文本字符串;如果为application/json则为JSON字符串。 filePath:字符串,二进制文件的本地文件路径。 messageID:字符串,如果是重试发送消息的消息ID。
返回值 字符串-消息的ID。如果出现错误返回NULL。(注:消息ID格式为:“FreePP号码-Unix时间戳(秒)-两位序号”
说明 向指定的用户异步地发送一对一的多媒体消息。 注:此接口为异步接口,可触发回调函数包括onSendMessageEvent和onUploadAttacthmentProgressEvent。 如果messageID参数有值,则SDK会判断此消息ID是否有效。对于有效的消息,SDK会重新发送此消息ID对应的消息内容,并返回此Message ID;对于无效的消息,SDK则直接返回为NULL。
示例

发送群组消息

函数原型 + (NSString *)sendGroupMessage:(NSString *)dstGroupID withMIME:(NSString *)mimeType forText:(NSString *)textContent forFile:(NSString *)filePath forRetryMessageID:(NSString *)messageID;
参数 dstGroupID:字符串,目标群组的唯一标识符。 mimeType:字符串,多媒体消息的类型。 textContent:字符串,文本消息的内容,其格式根据mimeType来区分。 filePath:字符串,二进制文件的本地文件路径。 messageID:字符串,如果是重试发送消息的消息ID。
返回值 字符串-消息的ID。如果出现错误返回NULL。 注:消息ID格式为:“FreePP号码-Unix时间戳(秒)-两位序号”
说明 向指定的群组异步地发送一对多的多媒体消息。 注:此接口为异步接口,可触发回调函数OnSendMessageEvent和onUploadAttacthmentProgressEvent。 如果messageID参数有值,则SDK会判断此消息ID是否有效。对于有效的消息,SDK会重新发送此消息ID对应的消息内容,并返回此Message ID;对于无效的消息,SDK则直接返回为NULL。
示例

清除缓存的消息

函数原型 + (void)clearMessage:(NSArray *)messageIDArray;
参数 messageIDArray:字符串数组,被释放的消息的标识符。如果此参数为空,则默认清除所有缓存。
返回值
说明 清除SDK内部存储的消息记录。 注:APP在接收或发送消息成功后,可调用此函数以清除SDK中的缓存记录。
示例

检查新消息

函数原型 + (void)checkNewMessage
参数
返回值
说明 客户端主动到服务器上检查和下载新消息。 注:此接口为异步接口,可触发回调函数onReceiveMessageEvent。
示例

响应消息发送结果

函数原型 CALLBACK -(void)onSendMessageEvent:(NSString *)messageID withSendResult:(int)sendResult
参数 messageID:字符串,发送消息的唯一标识ID。 sendResult:整型,发送消息的结果。0=成功,发送失败参照错误码表。
返回值
说明 APP通过此接口获得一对一和群聊消息消息的发送状态。 注:对于发送文本消息和文件消息,均使用此回调函数来获得发送结果;对于文件型消息,还可以通过onUploadMessageAttachmentProgressEvent回调函数获取文件传输的进度。 注:如果余额不足,发送消息失败,则上报原因为ERROR_BANNER_USER(-13)
示例

获取新消息

函数原型 CALLBACK - (void)onReceiveMessageEvent:(int)msgType withMessageObject:(id)msgObject
参数 msgType:整型,消息类型,取值为 0= 一对一消息/群组消息类型; 1 = 加入群组通知类型; 2 = 离开群组类型; 3 = 消息接收状态通知类型 msgObject:消息对象,每种消息类型分别对应不同的对象,具体定义参考附录3“消息对象对照表”
返回值
说明 App通过此回调函数统一地接收一对一或群组消息。
示例

下载消息附件

函数原型 + (int)downloadMessageAttachment:(NSString *)messageID withThumbnail:(int)isThumbnail saveFilePath:(NSString *)filePath;
参数 messageID:字符串,要求下载的消息的唯一标识。 isThumbnail:整型,是否要下载缩略图,1-下载缩略图,0-下载原图,非图片类型无效参数。 filePath:字符串,下载到本地的文件路径,包含文件的名称。
返回值 整型-0:加入到下载队列中,其他错误码参考错误码表。
说明 下载指定消息中的附件(多媒体文件)。 注:App首先通过OnReceivedMessageEvent接口获得消息通知,然后再调用downloadMessageAttachment接口下载消息中的附件。 注:此接口为异步接口,可触发回调函数onDownloadMessageAttachmentProgressEvent和onDownloadMessageAttachmentEvent。
示例

响应消息附件的下载结果

函数原型 CALLBACK - (void)onDownloadMessageAttachmentEvent:(NSString *)messageID withSendResult:(int)downloadResult
参数 messageID:字符串,下载消息的唯一标识ID。 downloadResult:整型,下载消息的结果。0=成功,下载失败参照附录2。
返回值
说明 APP通过此接口更新消息附件的下载状态。
示例

响应消息附件的上传进度

函数原型 CALLBACK - (void)onUploadMessageAttachmentProgressEvent:(NSString *)messageID withProgress:(int)uploadProgress;
参数 messageID:字符串,消息的唯一标识ID; uploadProgress:整型,当前上传文件进度的百分比。
返回值
说明 APP可通过此回调函数更新文件上传的进度提示。 注:文件上传由sendMessage或sendGroupMessage接口发起。
示例

响应消息附件的下载进度

函数原型 CALLBACK - (void)onDownloadMessageAttachmentProgressEvent:(NSString *)messageIDwithProgress:(int)downloadProgress;
参数 messageID:字符串,消息的唯一标识ID; downloadProgress:整型,当前下载文件进度的百分比
返回值
说明 APP可通过此回调函数更新文件下载的进度提示。
示例

发送消息的接收状态

函数原型 + (int)reportMessageStatus:(NSString *)dstFreePPID forMessageID:(NSString *)messageID withMessageStatus:(int)status;
参数 dstFreePPID:字符串,目标用户的FreePP号码。 messageID:字符串,消息的唯一标识ID。 status:整型,发送消息接收状态通知的类型,包括:1 = 已送达;2 = 已读。
返回值 整型 – 是否发送成功。0 = 已加入发送队列发送;-1 = 无网络无法发送
说明 发送消息接收状态通知,包括消息的送达和已读通知。 注:消息接收状态的通知为非可靠传输,不保证100%送达。
示例
4.1.3 群组管理

创建消息群组

函数原型 + (NSString *)createGroupChat:(NSString *)groupName withMember:(NSArray *)memberArray
参数 groupName:字符串,创建群组的主题。 memberArray:字符串数组,群组成员的FreePP号码列表。
返回值 字符串-服务器分配的群组ID。如果出现错误,则返回NULL。
说明 创建一个消息群组
示例

邀请联系人加入消息群组

函数原型 + (int)joinGroupChat:(NSString *)groupID withMember:(NSArray *)memberArray
参数 groupID:字符串,创建群组时返回的群组ID。 memberArray:字符串数组,邀请群组成员的FreePP ID数组。
返回值 整型-加入群组的结果。0=成功,其它参见附录2
说明 邀请用户加入指定的消息群组,被邀请的客户端会以即时消息的形式收到邀请通知。
示例

退出消息群组

函数原型 + (int)leaveGroupChat:(NSString *)groupID withMember:(NSArray *)memberArray;
参数 groupID:字符串,群组的唯一标识ID。 memberArray:字符串数组,被踢出群组成员的FreePP ID数组。
返回值 整型–离开群组的结果。0=成功,其它参见附录2
说明 退出指定的消息群组。
示例

获取群组信息

函数原型 + (GroupInfo *)getGroupChatInfo:(NSString *)groupID;
参数 groupID:字符串,群组的唯一标识ID。
返回值 群组对象( GroupInfo ),包含以下属性: groupID:字符串,群组唯一标识; ownerFreePPID:字符串,群创建者的FreePP号码; arrayMemberFreePPID:字符串数组,群成员的FreePP号码; createTime: 整型,创建群组的时间; groupName:字符串,群名称或主题;
说明 获得指定群组的信息。
示例

通话功能接口

通话功能接口的函数原型声明参见“FreePPSDKStream.h”文件,主要提供一对一语音或视频通话、语音会议、视频会议和媒体I/O设备(麦克风、扬声器和摄像头)控制等功能。

4.2.1 通话/会议控制

发起一对一的语音/视频通话呼叫

函数原型 + (NSString *)makeCall:(NSString *)dstID withMediaType:(NSInteger)media;
参数 dstID:字符串,被叫用户的FreePP号码。 media:整型,通话的媒体类型。取值为 1=语音通话; 2=视频通话;
返回值 字符串-通话的会话标识符(call-id)。
说明 发起一对一的,免费的FreePP语音或视频通话。 注:此接口为异步接口,可触发回调函数onCallStateEvent。APP可根据此函数的返回值(call-id),在回调函数中匹配相应的通话状态通知。
示例

发起节费电话呼叫

函数原型 + (NSString *)makeOutboundCall:(NSString *)phone withVia:(NSString *)route;
参数 phone:字符串,被叫电话号码。 route:Outbound路由码。
返回值 字符串-通话的会话标识符(call-id)。
说明 发起一对一的,节费的outbound语音通话呼叫。 注:此接口为异步接口,可触发回调函数onCallStateEvent。APP可根据此函数的返回值(call-id),在回调函数中匹配相应的通话状态通知。
示例

创建服务器端会议室

函数原型 + (NSString *)createConference:( NSString *)groupID
参数 groupID:字符串,已创建的群聊ID,可为空。
返回值 字符串-会议的会话标识符(conference-id),服务器端生成。
说明 创建一个新的服务器端会议室,可以以已存在的群聊ID作为参数,也可以传空值
示例

发起语音或视频会议

函数原型 + (NSString *)joinConference:(NSArray *)dstIDs withMediaType:(NSInteger)media withServerConferenceID:(NSString *)room withPhones:(NSArray *)phones withVia:(NSString *)route;
参数 dstIDs:字符串数组,与会者的FreePP号码。 media:整型,会议的媒体类型。3=语音会议,4=视频会议 room:字符串,会议室的FreePP号码。如果会议室号码为用户本身的FreePP号码,则采用客户端混音方式;否则采用服务器混音方式。 phones:字符串数组,与会者的电话号码。 route:字符串,Outbound路由码。
返回值 字符串-会议的会话标识符(conference-id)。
说明 发起语音或视频会议呼叫并邀请与会者参加会议。 注:此接口为异步接口,可触发回调函数onConferenceStateEvent。APP可根据此函数的返回值(call-id),在回调函数中匹配相应的通话状态通知。 注:对于采用服务器混音的会议,APP需预先申请会议室号码。此外,针对同一个会议室,此函数可以被多次调用,以邀请不同的与会者加入同一个会议。 注:服务器混音时,与会者可以邀请自己主动加入会议室,客户端混音时,邀请者不需要邀请就能加入会议室,如果与会者只邀请自己加入会议室,则返回-45(ERROR_CAN_NOT_CALL_ME),如果还有其他与会者,则可以正常邀请其他与会者加入会议室,邀请自己的处理将被忽略
示例

结束一对一通话

函数原型 + (int)hangupCall:(NSString *)callID;
参数 callID:字符串,通话的会话标识符或者会议室标识符,一般由makeCall/makeOutboundCall/joinConference或onReceivedCall函数返回。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 结束指定的一对一通话(主叫和被叫均可调用此函数)。 注:此接口为异步接口,可触发回调函数onCallStateEvent。APP可根据此函数的返回值(call-id),在回调函数中匹配相应的通话状态通知。 注:如果是一个callid,则挂断当前的一对一通话;如果是一个conferenceid,则挂断本地该与会者与会议室的通话,退出该会议室
示例

结束或退出会议

函数原型 + (int)hangupConference:(NSString *)conferenceID;
参数 conferenceID:字符串,会议的标识符,一般由joinConference函数返回。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 结束指定的会议。 注:对于客户端混音的会议,发起会议的主持人调用此函数时,会挂断所有与会者,而与会者调用此函数时仅挂断自己;对于服务器混音的会议,任何与会者调用此函数,都会挂断所有与会者
示例

接听通话请求

函数原型 + (int)answerCall:(NSString *)callID;
参数 callID:字符串,通话的会话标识符,一般由onReceivedCall回调函数返回。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 被叫用户接听指定的来电请求。 注:在进行通话时,被叫用户会收到onReceiveCall通知和来电请求的callID。如果用户接听此来电,则APP需要调用此函数;如果用户拒绝接听来电,则APP需调用hangupCall函数拒绝来电。 注:此接口为异步接口,可触发回调函数onCallStateEvent。APP可根据通话标识符,在回调函数中匹配相应的此通话的状态通知。
示例

通话保持或恢复

函数原型 + (int)holdCall:(NSString *)callIDwithHold:(NSInteger)hold;
参数 callID:字符串,通话的会话标识符。 hold:整型,保持(1)或恢复(0)通话。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 保持或恢复通话。
示例

通话静音或取消静音

函数原型 + (int)muteCall:(NSString *)callIDwithMute:(NSInteger)mute;
参数 callID:字符串,通话的会话标识符或者会议室标识符 mute:整型,麦克风静音(1)或取消静音(0)。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 麦克风(或会议室主持人)静音或取消静音。
示例

开启通话录音

函数原型 + (int) startMediaRecord:(NSString *)callID withFilePath:(NSString *)filepath withMedia:(int)media withFormat:(int)format withInternalSec:(int)internalSec;
参数 callID:字符串,通话的会话标识符或者会议室标识符 filepath:字符串,录音保存的文件(包括路径和文件名,文件后缀,后缀与format一致,如果文件名已存在则覆盖原有录音内容)。 media:整型,媒体类型1:audio(RECORD_MEDIA_AUDIO); 2:audio+video(RECORD_MEDIA_AUDIO_VIDEO)。 format:整型,文件格式类型 1:mp3(RECORD_FORMAT_MP3);2:avi(RECORD_FORMAT_AVI)。 internalSec:整型,自动分段时间间隔,以秒为单位, 默认为0,即不分段,>0 按时间段自动分段录音(视频录制暂不支持分段)。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 对指定通话开始录音。
示例

停止通话录音

函数原型 + (int)stopMediaRecord:(NSString *)callID;
参数 callID:字符串,通话的会话标识符或者会议室标识符
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 对指定通话停止录音。
示例

发送DTMF拨号音

函数原型 + (int)sendDTMF:(NSString *)callID withDTMFNum:(NSString*)digit withIntervalTime:(NSInteger)time withSendMode:(NSInteger)mode;
参数 callID:字符串,通话的会话标识符 digit:字符串,所要发送的二次拨号数字 time:整型,发送多个按键数字时的时间间隔,单位:ms(注:若只发送一个数字,此参数为0) digit:整型,DTMF信号传输模式,带外 =1,带内=0。
返回值 整型-操作是否成功。0=成功,其它=参见附录2.
说明 向一个已经接听的通话对象对端发送DTMF拨号音,完成二次拨号。
示例

选择视频会议画面

函数原型 + (int)subConferenceVideo:(NSString *)pubID;
参数 pubID:字符串,所要观看的与会者的FreePP号码
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 APP可通过此接口为视频会议中的参与者(包括主持人和与会者)选择所观看的视频画面。 注:SDK采用出版/订阅模型实现视频画面选择。每个与会者可以订阅自己想观看的视频画面。
示例

查询会议中的所有与会者

函数原型 + (int)listConference:(NSString *)conferenceID;
参数 conferenceID:字符串,会议的通话标识符,一般由joinConefernce或onReceiveCall函数获得。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 APP可通过此接口请求更新会议室的与会者列表。对于主持人而言,conferenceID为会议室号码;对于与会者而言,conferenceID为空。 注:此接口为异步接口,可触发回调函数onConferenceStateEvent。APP可通过回调函数获得与会者的状态和信息。
示例

会议与会者控制

函数原型 +(int)ctrlConference:(NSString *)conferenceID withCtrlAction:(NSInteger)action withCtrlDstFreePPID:(NSString *)dstID;
参数 conferenceID:字符串,会议的通话标识符,一般由joinConefernce或onReceiveCall函数获得。 action:整型,对与会者执行的操作,取值为 0=踢出; 1=静音; 2=取消静音。 dstID:字符串,被操作的与会者的FreePP号码。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 APP通过此接口可控制会议中的与会者的状态。 注:此接口为异步接口,可触发回调函数onConferenceStateEvent。APP可通过回调函数获得与会者的更新状态。
示例
4.2.2 状态通知和查询

响应来电请求通知

函数原型 CALLBACK - (void)onReceiveCallEvent:(NSString *)callId withStartTime:(int)timeStamp withCallerID:(NSString *)callerId withCallerName:(NSString *)callerName withMediaType:(NSInteger)media withCallType:(NSInteger)callType;
参数 callId:字符串,通话或会议的会话标识符。 timeStamp:整型,通话或者发起的服务器时间, Unix时间戳,单位秒。 callerId:字符串,主叫用户的FreePP号码。 callerName:字符串,主叫用户的昵称或电话号码。 media:整型,通话请求的媒体类型,取值为1=语音通话;2=视频通话;3=语音会议通话;4=视频会议通话。 callType:整型,来电通知的类型,取值为1=新来电,2=未接来电。
返回值
说明 APP通过此接口接收远端用户的来电请求。如果APP在锁屏状态,SDK会自动弹出PUSH通知;如果APP在运行状态,则由APP决定是否显示来电通知界面。
示例

响应通话状态改变通知

函数原型 CALLBACK - (void)onCallStateEvent:(NSString *)callId withStartTime:(int)timeStamp withCalllState:(NSInteger)state withCallReason:(NSInteger)reason;
参数 callId:字符串,通话或会议的会话标识符。 timeStamp:整型,通话或者发起的服务器时间,Unix时间戳,单位秒。 state:整型,当前的通话状态,取值为 0 – IDLE(待机); 1 – INITIATE(正在发起呼叫); 2 – ANSWER(已接听); 3 – HOLD(保持中); 4 – HANGUP(已挂断)。 有关通话状态的说明可参考3.2.2节。 reason:整型。当state为HANGUP时标识结束通话的原因,包括:被叫不在线、没有可用的网络连接、被叫忙等;当state为ANSWER时表示进入通话的途径,包括:0 - 接听电话;1 - 恢复通话。
返回值
说明 APP通过此接口获知通话的状态发生改变。在不同的通话状态下,APP应显示不同提示,例如:1) IDLE-无;2) NITIATE-正在呼叫中(主叫)或通话建立中(被叫);3) ANSWER-通话中;4) HOLD-通话保持中;5) HANGUP-通话结束。 注:当余额不足时,上报的挂断原因为CALL_REASON_HANGUP_NO_BALANCE(19)
示例

响应会议中与会者状态改变通知

函数原型 CALLBACK -(void)onConferenceStateEvent:(NSString *)conferenceId withCallId:(NSString *)callId withCallerId:(NSString *)callerId withCallState:(NSInteger)state withCallReason:(NSInteger)reason;
参数 conferenceId:字符串,会议的会话标识符。 callId:字符串,与会者的通话标识符。 calleeId:字符串,与会者的FreePP号码。 state:整型,与会者当前的通话状态,取值为 1 – INITIATE(正在邀请); 2 – ANSWER(已进入); 3 – HANGUP(已离开)。 reason:整型。当state为HANGUP时,标识结束通话的原因,包括:被叫不在线、没有可用的网络连接、被叫忙等;当state为ANSWER时表示进入通话的途径,包括:0 - 接听电话;1 - 恢复通话。
返回值
说明 APP通过此接口获得会议中某个与会者的状态发生改变。在不同的通话状态下,APP应显示不同提示:1) INITIATE-正在呼叫中(主叫)或通话建立中(被叫);2) ANSWER-进入会议;3) HANGUP-离开会议。
示例

响应视频通信状态改变通知

函数原型 CALLBACK -(void)onRemoteVideoStateEvent:(NSString *)callId withRemoteVideoState:(NSInteger)state;
参数 callId:字符串,通话或会议的会话标识符。 state:整型,当前的通话的远端视频状态,扩展后分高位和地位,高位是原因(_stop_video_reason),低位是state(_remote_video_state),具体值定义请参考sdk常量定义。
返回值
说明 APP通过此接口获得视频通话中远端用户的视频发送状态的改变。在不同的视频状态下,APP可选择显示不同的界面。
示例

响应通话录音状态改变通知

函数原型 CALLBACK -(void)onRecordStateEvent:(NSString *)filePath withState:(NSInteger)state;
参数 filePath:字符串,录音文件路径及文件名。 state:整型,当前的通话的远端视频状态,取值为1=开启;2=停止;3=生成mp3文件。
返回值
说明 APP通过此接口获得视频通话中远端用户的视频发送状态的改变。在不同的视频状态下,APP可选择显示不同的界面。
示例

查询通话的状态和信息

函数原型 + (FreePPCallInfo *)getCallInfo:(NSString *)callID;
参数 callId:字符串,通话或会议的会话标识符。
返回值 FreePPCallInfo对象指针-通话的信息对象。
说明 获取指定通话的当前状态和详细信息,且将上述信息存放在FreePPCallInfo对象中返回。FreePPCallInfo对象包含如下属性: callId:字符串,通话或会议的会话标识符。 calleeId:字符串,对端用户的FreePP号码。 calleeName:字符串,对端用户的昵称或电话号码。 mediaType:整型,通话请求的媒体类型(语音、视频或会议)。 callState:整型,当前的通话状态,取值为:0 - IDLE;1 - INITIATE;2 - ANSWER;3 - HOLD;4 - HANGUP。
备注

获得当前正在进行的通话列表

函数原型 + (NSArray *)getAllCallIDList;
参数
返回值 字符串数组-所有当前正在进行的通话的标识符(call-id)列表。
说明 获取当前所有呼出和呼入通话的call-id字符串的列表。 注:APP可首先调用此函数获得call-id列表,然后再调用getCallInfo函数获得通话的状态和详细信息。
示例
4.2.3 媒体I/O管理

设置视频摄像头

函数原型 + (int)setCamera:(NSInteger)device;
参数 device:整型,设备标识符,例如: 0 - 后置摄像头; 1 - 前置摄像头; -1 – 不使用摄像头。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 设置当前视频通话所使用的摄像头。
示例

设置声音输出设备

函数原型 + (int)setAudioOutput:(NSInteger)device;
参数 device:整型,扬声器设备标识符,例如: 0 - 听筒; 1 - 扬声器; 2 - 当前连接的蓝牙耳机。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 设置通话所使用的扬声器设备。
示例

设置视频显示设备

函数原型 + (int)setVideoDisplay:(UIView *)displayRemote withLocalVideo:(UIView *)displayPreview;
参数 displayRemote:View对象,用于显示远端视频的窗口对象(对方的图像,根据操作系统选择对象类型)。 displayPreview:View对象,用于显示近端视频的窗口对象(自己的图像)。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 设置视频通话中用于显示视频的窗口对象。 注:音视频切换流程 1.通过setParameter接口设置开启视频的模式:" auto_send_video "= 0(手动),1(自动),默认值为1,即视频通话时自动发送本地视频; 2.手动模式下,当收到onRemoteVideoStateEvent()的REMOTE_VIDEO_START状态时调用setVideoDispaly()设置远端视频显示窗口; 3.手动模式下,当用户点击开启视频时,先调用setVideoDispaly()设置本地预览视频显示窗口;
示例

开启本地视频发送

函数原型 + (int)startVideoSend:(NSString *)callID;
参数 callID:通话唯一标识符
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 开启本地视频的发送。 注:手动模式下,调用startVideoSend()还可以实现音频切换到视频,在调用之前先调用setVideoDispaly()显示本端预览视频。
示例

停止本地视频发送

函数原型 + (int)stopVideoSend:(NSString *)callID withReason:(int)reason;
参数 callID:字符串,通话唯一标识符 reason:整型,0-挂断电话,1-停止视频并切换到音频通话,2-只停止本端视频发送
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 停止视频,并通知对端停止原因。 注:手动模式下,调用stopVideoSend()还可以实现视频切换到音频。
示例

设置通话请求的回铃音

函数原型 + (int)setRingbackTone:(NSString *)ringbackFilePath;
参数 ringbackFilePath:字符串,App层Bundle或本地文件系统中回铃音文件的存储路径。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 设置电话呼叫的回铃音。
示例

对讲功能接口

对讲功能接口的函数原型声明参见“FreePPSDKPTT.h”文件,主要提供进入或退出对讲频道、请求和释放发言权等控制功能。

4.3.1 频道/发言控制

进入语音对讲频道

函数原型 + (NSString *)enterPTTChannel:(NSString *)roomID;
参数 roomID:字符串,频道标识符(即频道的FreePP号码)。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 进入语音对讲频道,并自动开始收听频道中的语音。 注:语音对讲频道的号码由系统预先分配,因此不在本文档的讨论范围之内。
示例

离开语音对讲频道

函数原型 + (NSString *)leavePTTChannel:(NSString *)roomID;
参数 roomID:字符串,频道标识符。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 离开语音对讲频道。
示例

请求对讲的发言权

函数原型 + (NSString *)pushTalk:(NSString *)roomID;
参数 roomID:字符串,频道标识符。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 请求语音频道中的发言权。一旦获得发言权,则自动进入发言状态,并停止收听语音。 注:此接口为异步接口,可触发回调函数onPTTChannelStateEvent。APP可通过回调函数获得请求的结果。
示例

释放对讲的发言权

函数原型 + (NSString *)releaseTalk:(NSString *)roomID;
参数 roomID:字符串,频道标识符。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 释放已获得的频道发言权,并恢复收听状态。 注:此接口为异步接口,可触发回调函数onPTTChannelStateEvent。APP可通过回调函数获得请求的结果。
示例
4.3.2 频道状态通知

响应语音发言状态通知

函数原型 CALLBACK -(void)onPTTChannelStateEvent:(NSString *)roomId withCallState:(NSInteger)state withFreePPId:(NSString *)speaker withPosition:(NSInteger)position;
参数 roomID:字符串,频道标识符。 state:整型,频道的当前发言状态,取值为: 0=IDLE(当前频道空闲,没有发言者); 1=GRANTED(本机用户获得发言权并进入发言状态); 2=RELEASED(本机用户释放发言权并恢复收听状态); 3= QUEUED(本机用户正在排队等待发言权); 4=DENY(服务器拒绝本机用户的发言请求); 6=TAKEN(频道被占用,其它用户正在发言); 10=ENTER(用户进入频道); 11=LEAVE(用户离开频道)。 speaker:字符串,当state=6时,指当前发言者的FreePP号码;当state=10/11时,指进入或离开频道的用户的FreePP号码。 position:整型,当state=3时,指本机用户等待发言的排队位置。
返回值 整型-操作是否成功。0=成功,其它=参见附录2。
说明 APP通过此接口获得语音对讲频道的当前状态并提示用户。
示例

工作流程

下面主要介绍APP和SDK之间的基本交互操作流程。

注:

4.4.1启动流程

APP程序在启动时,应尽早完成SDK的初始化和认证工作。一般情况下,APP可在收到iOS系统的application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions通知时完成启动流程(如下图所示)。

上图中,APP和SDK的具体交互流程如下:

4.4.2 一对一普通消息流程

上图中,APP和SDK的具体交互流程如下:

4.4.3文件消息流程

上图中,APP和SDK的具体交互流程如下:

4.4.4 群组消息流程

上图中,APP和SDK的具体交互流程如下:

4.4.5 基本通话流程

上图中,APP和SDK的具体交互流程如下:

4.4.6 拒接电话流程

上图中,APP和SDK的具体交互流程如下:

4.4.7 呼叫保留/恢复流程

上图中,APP和SDK的具体交互流程如下(以主叫端为例):

4.4.8 音视频切换流程

上图中,APP和SDK的具体交互流程如下:

4.4.9 基本会议流程

上图中,APP和SDK的具体交互流程如下:

4.4.10 会议拒接流程

上图中,APP和SDK的具体交互流程如下:

4.4.11 会议控制流程

上图中,所有与会者都进入会议后,APP和SDK的具体交互流程如下:

4.4.12视频控制流程

上图为视频会议订阅流程,所有与会者都进入会议后,APP和SDK的具体交互流程如下:

4.4.13语音对讲流程

上图中,APP和SDK的具体交互流程如下:

开发环境配置

第三方应用程序在XCode中使用SDK库时,需要注意链接的以下Framework和Library:

此外,在APP项目中需要设定以下指定的选项(参见黑色粗体字),以确保SDK能够正确地链接到APP中。

另一方面,第三方应用程序在引用SDK通话功能模块或对讲功能模块的头文件时,需要在APP的工程设置中,分别增加宏定义“FREEPP_SDK_STREAM_API”或“FREEPP_SDK_STREAM_CONF_API”来启用SDK中的通话功能或会议功能的API方法(如下图),